import Vue from 'vue';
import store from '@/store';
import { encryptDes } from '@/utils/DES';

export function newverifyRoles (name) {
  let configRoles = [];
  configRoles = rolesRelation[name];
  // eslint-disable-next-line camelcase
  const VINTEX_roleId = store.state.contexInfo && store.state.contexInfo.roleIds;
  // eslint-disable-next-line camelcase
  if (configRoles != null && configRoles.length > 0 && VINTEX_roleId != null && VINTEX_roleId != 'undefined') {
    // 从缓存中取角色
    // 比较角色信息
    for (let index = 0; index < configRoles.length; index++) {
      const element = configRoles[index];
      if (VINTEX_roleId.split(',').indexOf(element) > -1) {
        return true;
      }
    }
  }
  return false;
}

/**
 * 验证角色是否有权限
 * @param {*} name 模块/页面的名称
 * @param {*} type 权限类型，比如弹窗提示等等，目前权限类型不规划，默认传0
 */
export function verifyRoles (name, type) {
  let configRoles = [];
  configRoles = rolesRelation[name];
  // eslint-disable-next-line camelcase
  const VINTEX_roleId = store.state.contexInfo && store.state.contexInfo.roleIds;
  // eslint-disable-next-line camelcase
  if (configRoles != null && configRoles.length > 0 && VINTEX_roleId !== null && VINTEX_roleId !== 'undefined') {
    // 从缓存中取角色
    // 比较角色信息
    for (let index = 0; index < configRoles.length; index++) {
      const element = configRoles[index];
      if (VINTEX_roleId.split(',').indexOf(element) > -1) {
        // 如果找到了，返回结果true
        return true;
      }
    }
  }
  /**
 * 投顾服务无权限的处理逻辑
 * @returns
 */
function verifyTGFW () {
  Vue.prototype.$notify({
    title: '您没有权限,请使用投顾服务角色用户登录，或请联系客户经理',
    type: 'error'
  });
  return false;
}
  // 如果没有找到，那么就要实现其他逻辑了。
  switch (name) {
    case 'home':
    case 'research':
    case 'product':
    case 'trade':
    case 'service':
    case 'data':
      verifyResearch(type);
      return false;
    case 'xst':
      verifyXST();
      return false;
    case 'GTJA':
      verifyForGTJA();
      return false;
    case 'TGFW':
      verifyTGFW();
      return false;
    default:
      return false;
  }
}

/**
 * 统一登录跳转方法
 * source 跳转来源 4是跳转到E柜通，0道合web、1富易、2、道合PC
 * @param {*} source
 * @param {*} jumpOrignUrl
 * @param {*} busiType
 */
 export function unitJumpLogin (source, jumpUrl) {
  // 获取本地userInfo
  const userinfo = localStorage.getItem('VINTEX_userInfo') ? JSON.parse(localStorage.getItem('VINTEX_userInfo')) : '';
  // 获取本地orgInfo
  const orgInfo = localStorage.getItem('VINTEX_orgInfo') ? JSON.parse(localStorage.getItem('VINTEX_orgInfo')) : '';
  // 跳转参数
  const userCode = userinfo.USER_CODE; // 用户编码：唯一
  const instCode = orgInfo.INST_USER_CODE; // 机构编码：唯一，用于单点登录的时候指定机构管理人

  // signObj需要的数据
  const { AUTH_BIND_STATION, USER_TOKEN, OP_PROGRAM, OP_SITE, PHONE, TERMINAL_INFO } = userinfo;

  // 开户相关
  const data = {};

  // 要加密的内容
  const signObj = {
    fingerprint: AUTH_BIND_STATION,
    ipv4: OP_PROGRAM,
    mac: OP_SITE,
    phone: PHONE,
    time: (new Date()).getTime(),
    tminfo: TERMINAL_INFO,
    token: USER_TOKEN.slice(0, 16),
    data
  };

  // 加密key，为userCode+instCode然后取前8位长度
  const signKey = (() => {
    const str = userCode + instCode;
    if (str.length < 8) {
      // 不足8位补0
      return ('00000000' + str).slice(-8);
    } else {
      return str.slice(0, 8);
    }
  })();
  const sign = encryptDes(JSON.stringify(signObj), signKey);
  // 4是e柜通，其他是按照PC的跳转方式
  if (source == 4) {
    jumpUrl += `&source=${source}&userCode=${userCode}&instCode=${instCode}&sign=${sign}`;
  } else {
    jumpUrl += `?source=${source}&userCode=${userCode}&instCode=${instCode}&sign=${sign}`;
  }
  return jumpUrl;
}

/**
 * 研究等模块无权限的处理逻辑
 * @returns
 */
function verifyResearch (type) {
  if (type == '1') {
    window.location = process.env.VUE_APP_COSWEBURL + '/#/Ficc';
    return;
  }
  Vue.prototype.$notify({
    title: '无权限，请联系客户经理',
    type: 'error'
  });
}

/**
 * 研究等模块无权限的处理逻辑
 * @returns
 */
function verifyXST () {
  Vue.prototype.$notify({
    title: '没有权限,请使用销售通角色登录',
    type: 'error'
  });
}

function verifyForGTJA () {
  Vue.prototype.$notify({
    title: '仅向国泰君安机构客户开放',
    type: 'error'
  });
}

// home 首页权限校验统一，后续有区分根据type去判定
// research 研究模块权限校验统一，后续有区分根据type去判定
// product 产品模块权限校验统一，后续有区分根据type去判定
// xst 销售通权限校验，后续细分权限，根据type区分
// trade 交易模块权限校验，后续细分权限校验，根据type区分
// service 服务权限校验，后续细分权限校验，根据type区分
// invest 投顾模块权限校验
// egt e柜通权限校验
// data 数据模块权限校验
// dzqz 电子签章权限校验
// JGGLY 机构管理员权限校验
const rolesRelation = {
  home: ['01', '14', '15'],
  research: ['01', '14', '15'],
  product: ['01', '14', '15'],
  trade: ['01', '14', '15'],
  service: ['01', '14', '15'],
  data: ['01', '14', '15'],
  xst: ['XST000', 'XST001', 'XST002', 'XST003', 'XST004'],
  egt: ['EGT001'],
  invest: [],
  dzqz: [],
  JGGLY: ['JGGLY'],
  GTJA: ['01', '14', '15']
};
